package com.pet.server.ext.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;

import net.sf.json.JSONObject;

public class Crypto_bak {
	public static final String ALGORITHM = "DES";
	public static final String KEY = "dfyfhqs9";
	
	public static String encryptData(String strs) {
		try{
			byte[] contentBytes = strs.getBytes();
	    	byte[] keyBytes = KEY.getBytes();
	        byte[] cookieBytes = encryptData(contentBytes, keyBytes);
	        return ByteHelper.byte2hex(cookieBytes);
		}catch(Exception e){
			e.printStackTrace();
			return null;
		}

	}
	public static String decryptData(String strs){
		try{
			byte[] cookieBytes = ByteHelper.hex2byte(strs);
	        byte[] decodedBytes = decryptData(cookieBytes, KEY.getBytes());
	     	String decodedString = new String(decodedBytes);
	     	return decodedString;
		}catch(Exception e){
			//e.printStackTrace();
			return null;
		}
		
	}
	private static byte[] decryptData(byte[] input, byte[] key) throws Exception { 
	    SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key, ALGORITHM); 
	    Cipher c1 = Cipher.getInstance(ALGORITHM); 
	    c1.init(Cipher.DECRYPT_MODE, deskey); 
	    byte[] clearByte = c1.doFinal(input);   
	    return clearByte; 
	} 
	
    private static byte[] encryptData(byte[] input, byte[] key) throws Exception { 
        SecretKey deskey = new javax.crypto.spec.SecretKeySpec(key, ALGORITHM); 
        Cipher c1 = Cipher.getInstance(ALGORITHM); 
        c1.init(Cipher.ENCRYPT_MODE, deskey); 
        byte[] cipherByte = c1.doFinal(input);   
        return cipherByte;  
    } 
    public static String Encrypt(String strSrc,String encName) {
		        //parameter strSrc is a string will be encrypted,
		        //parameter encName is the algorithm name will be used.
		        //encName dafault to "MD5"
		MessageDigest md=null;
		String strDes=null;
		
		byte[] bt=strSrc.getBytes();
		try {
		    if (encName==null||encName.equals("")) {
		          encName="MD5";
		    }
			md=MessageDigest.getInstance(encName);
			md.update(bt);
			strDes=bytes2Hex(md.digest());  //to HexString
		}
		catch (NoSuchAlgorithmException e) {
		System.out.println("Invalid algorithm.");
		return null;
		}
		        return strDes;
       }

	public static String bytes2Hex(byte[]bts) {
	 String des="";
	 String tmp=null;
	 for (int i=0;i<bts.length;i++ ) {
	            tmp=(Integer.toHexString(bts[i] & 0xFF));
	            if (tmp.length()==1) {
	                des ="0";
	            }
	            des =tmp;
	        }
	        return des;
}
    
    
	
	
	
	
	public static String SHA1(String decript) {
        try {
            MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
            digest.update(decript.getBytes());
            byte messageDigest[] = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();
 
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
 
    public static String SHA(String decript) {
        try {
            MessageDigest digest = java.security.MessageDigest
                    .getInstance("SHA");
            digest.update(decript.getBytes());
            byte messageDigest[] = digest.digest();
            // Create Hex String
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < messageDigest.length; i++) {
                String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();
 
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
 
    public static String MD5(String input) {
        try {
            // 获得MD5摘要算法的 MessageDigest 对象
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的字节更新摘要
            mdInst.update(input.getBytes());
            // 获得密文
            byte[] md = mdInst.digest();
            // 把密文转换成十六进制的字符串形式
            StringBuffer hexString = new StringBuffer();
            // 字节数组转换为 十六进制 数
            for (int i = 0; i < md.length; i++) {
                String shaHex = Integer.toHexString(md[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexString.append(0);
                }
                hexString.append(shaHex);
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }
 
    /**
     * 加密
     * 
     * @param content
     *            需要加密的内容
     * @param password
     *            加密密码
     * @return
     */
    public static byte[] encryptAES(String content, String password) {
        try {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(128, new SecureRandom(password.getBytes()));
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher = Cipher.getInstance("AES");// 创建密码器
            byte[] byteContent = content.getBytes("utf-8");
            cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化
            byte[] result = cipher.doFinal(byteContent);
            return result; // 加密
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }
 
    /**
     * 解密
     * 
     * @param content
     *            待解密内容
     * @param password
     *            解密密钥
     * @return
     */
    public static byte[] decryptAES(byte[] content, String password) {
        try {
            KeyGenerator kgen = KeyGenerator.getInstance("AES");
            kgen.init(128, new SecureRandom(password.getBytes()));
            SecretKey secretKey = kgen.generateKey();
            byte[] enCodeFormat = secretKey.getEncoded();
            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");
            Cipher cipher = Cipher.getInstance("AES");// 创建密码器
            cipher.init(Cipher.DECRYPT_MODE, key);// 初始化
            byte[] result = cipher.doFinal(content);
            return result; // 加密
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (NoSuchPaddingException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        } catch (IllegalBlockSizeException e) {
            e.printStackTrace();
        } catch (BadPaddingException e) {
            e.printStackTrace();
        }
        return null;
    }
 
    /**
     * BASE64解密
     * 
     * @param key
     * @return
     * @throws Exception
     */
    public static String decryptBASE64(String key) {
 
        return "";
    }
 
    /**
     * BASE64加密
     * 
     * @param key
     * @return
     * @throws Exception
     */
    public static String encryptBASE64(String key) {
 
        return "";
    }
	
	
	
	
	
	
	
	
	
    public static void main(String[] args){
    	String src = "8F7C94330AF8F0E4485E243B358A8E95860BE7F680834EA6A8A6C1E2AA2DEAAE23CF897D3AF6E07A1A1382EF46E6280A";
    	System.out.println(SHA1(src));
    }
}
